Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ

Node / meshtastic / Meshtastic-Android / files / .github / workflows / docs-governance.yml

Displaying Raw β€’ Download

.github/workflows/docs-governance.yml claude/upbeat-leakey-252594 (ade5b43c) Text, 17.05 KB

Tff7b72nameTb4b4b4: Ta5d6ffUITa5d6ff Ta5d6ff&Ta5d6ff Ta5d6ffDocsTa5d6ff Ta5d6ffGovernance

Tff7b72onTb4b4b4:
Tff7b72pull_request_targetTb4b4b4:
Tff7b72branchesTb4b4b4: Tb4b4b4[Te6edf3mainTb4b4b4]
Tff7b72typesTb4b4b4: Tb4b4b4[Te6edf3openedTb4b4b4, Te6edf3synchronizeTb4b4b4, Te6edf3reopenedTb4b4b4, Te6edf3labeledTb4b4b4, Te6edf3unlabeledTb4b4b4]
Tff7b72scheduleTb4b4b4:
Tb4b4b4- Tff7b72cronTb4b4b4: Ta5d6ff"Ta5d6ff0Te6edf3 Ta5d6ff6Te6edf3 Ta5d6ff*Te6edf3 Ta5d6ff*Te6edf3 Ta5d6ff1Ta5d6ff" T8b949e# Every Monday at 6 AM UTC
Tff7b72workflow_dispatchTb4b4b4:

Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffread
Tff7b72pull-requestsTb4b4b4: Ta5d6ffwrite

Tff7b72jobsTb4b4b4:
T8b949e# ── Job 1: Staleness β€” flag PRs that change UI without updating docs ────────
Tff7b72stalenessTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffDocsTa5d6ff Ta5d6ffstalenessTa5d6ff Ta5d6ffcheck
Tff7b72runs-onTb4b4b4: Ta5d6ffubuntu-24.04-arm
Tff7b72ifTb4b4b4: Tb4b4b4>Tb4b4b4-
Tff7b72github.event.pull_request != null
Tff7b72&& !contains(github.event.pull_request.labels.*.name, 'skip-docs-check')

Tff7b72stepsTb4b4b4:
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCheckout
Tff7b72usesTb4b4b4: Ta5d6ffactions/checkout@v6
Tff7b72withTb4b4b4:
Tff7b72refTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.event.pull_request.head.shaTa5d6ff Ta5d6ff}}
Tff7b72fetch-depthTb4b4b4: Ta5d6ff0

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDetectTa5d6ff Ta5d6ffchangedTa5d6ff Ta5d6fffiles
Tff7b72idTb4b4b4: Ta5d6ffchanged
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72BASE="${{ github.event.pull_request.base.sha }}"
Tff7b72HEAD="${{ github.event.pull_request.head.sha }}"

Tff7b72changed=$(git diff --name-only "$BASE" "$HEAD")

Tff7b72views_changed=$(echo "$changed" | grep -E \
Tff7b72'^feature/.*/src/commonMain/.*/(ui|component|screen)/|^feature/.*/src/androidMain/.*/ui/|^core/ui/src/commonMain/' \
Tff7b72| grep -v 'Test\|Preview\|__Snapshots__' || true)

Tff7b72docs_changed=$(echo "$changed" | grep -E '^docs/en/(user|developer)/' || true)

Tff7b72echo "views_changed<<EOF" >> "$GITHUB_OUTPUT"
Tff7b72echo "$views_changed" >> "$GITHUB_OUTPUT"
Tff7b72echo "EOF" >> "$GITHUB_OUTPUT"

Tff7b72echo "docs_changed<<EOF" >> "$GITHUB_OUTPUT"
Tff7b72echo "$docs_changed" >> "$GITHUB_OUTPUT"
Tff7b72echo "EOF" >> "$GITHUB_OUTPUT"

Tff7b72if [[ -n "$views_changed" && -z "$docs_changed" ]]; then
Tff7b72echo "stale=true" >> "$GITHUB_OUTPUT"
Tff7b72else
Tff7b72echo "stale=false" >> "$GITHUB_OUTPUT"
Tff7b72fi

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffPostTa5d6ff Ta5d6ffwarningTa5d6ff Ta5d6ffcomment
Tff7b72ifTb4b4b4: Ta5d6ffsteps.changed.outputs.staleTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'true'
Tff7b72usesTb4b4b4: Ta5d6ffactions/github-script@v9
Tff7b72withTb4b4b4:
Tff7b72scriptTb4b4b4: Tb4b4b4|
Tff7b72const viewsChanged = `${{ steps.changed.outputs.views_changed }}`.trim();
Tff7b72const body = [
Tff7b72'## πŸ“„ Docs staleness check β€” advisory',
Tff7b72'',
Tff7b72'This PR modifies user-facing UI source files but does not update any page under `docs/en/user/` or `docs/en/developer/`.',
Tff7b72'',
Tff7b72'> ⚠️ Doc changes propagate to **3 consumers**: in-app docs browser, Jekyll site (GitHub Pages), and meshtastic.org (Docusaurus sync). Updating a page in `docs/en/` automatically flows to all three.',
Tff7b72'',
Tff7b72'**Changed source files:**',
Tff7b72'```',
Tff7b72viewsChanged,
Tff7b72'```',
Tff7b72'',
Tff7b72'**What to check:**',
Tff7b72'| Changed area | Likely doc page |',
Tff7b72'|---|---|',
Tff7b72'| `feature/messaging/` | `docs/en/user/messages-and-channels.md` |',
Tff7b72'| `feature/node/` | `docs/en/user/nodes.md` or `docs/en/user/node-metrics.md` |',
Tff7b72'| `feature/map/` | `docs/en/user/map-and-waypoints.md` |',
Tff7b72'| `feature/connections/` | `docs/en/user/connections.md` |',
Tff7b72'| `feature/settings/` | `docs/en/user/settings-radio-user.md` or `docs/en/user/settings-module-admin.md` |',
Tff7b72'| `feature/firmware/` | `docs/en/user/firmware.md` |',
Tff7b72'| `feature/intro/` | `docs/en/user/onboarding.md` |',
Tff7b72'| `feature/discovery/` | `docs/en/user/discovery.md` |',
Tff7b72'| `feature/docs/` | Internal docs infrastructure |',
Tff7b72'| `core/ui/` | `docs/en/developer/codebase.md` or component-specific user pages |',
Tff7b72'',
Tff7b72'**New page checklist** (if adding a new doc page):',
Tff7b72'1. Create the `.md` file in `docs/en/user/` or `docs/en/developer/` with `last_updated` frontmatter',
Tff7b72'2. Register in `DocBundleLoader.kt` with string resources (in-app browser)',
Tff7b72'3. Jekyll and Docusaurus sync pick up new pages automatically β€” no config change needed',
Tff7b72'',
Tff7b72'If this PR does **not** require a doc update (e.g., internal refactor, bug fix, test change), add the **`skip-docs-check`** label to dismiss this check.',
Tff7b72'',
Tff7b72'> **Cross-platform note:** This check is advisory while doc coverage matures. Both Android and Apple repos use the same `skip-docs-check` label and advisory severity. See `meshtastic/design` standards for shared conventions.',
Tff7b72].join('\n');

Tff7b72const { data: comments } = await github.rest.issues.listComments({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72issue_number: context.issue.number,
Tff7b72});
Tff7b72const existing = comments.find(c =>
Tff7b72c.user.login === 'github-actions[bot]' &&
Tff7b72c.body.includes('Docs staleness check')
Tff7b72);
Tff7b72if (existing) {
Tff7b72await github.rest.issues.updateComment({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72comment_id: existing.id,
Tff7b72body,
Tff7b72});
Tff7b72} else {
Tff7b72await github.rest.issues.createComment({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72issue_number: context.issue.number,
Tff7b72body,
Tff7b72});
Tff7b72}

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDismissTa5d6ff Ta5d6ffstaleTa5d6ff Ta5d6ffcommentTa5d6ff Ta5d6ffwhenTa5d6ff Ta5d6ffdocsTa5d6ff Ta5d6ffareTa5d6ff Ta5d6ffupdated
Tff7b72ifTb4b4b4: Ta5d6ffsteps.changed.outputs.staleTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'false'
Tff7b72usesTb4b4b4: Ta5d6ffactions/github-script@v9
Tff7b72withTb4b4b4:
Tff7b72scriptTb4b4b4: Tb4b4b4|
Tff7b72const { data: comments } = await github.rest.issues.listComments({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72issue_number: context.issue.number,
Tff7b72});
Tff7b72const existing = comments.find(c =>
Tff7b72c.user.login === 'github-actions[bot]' &&
Tff7b72c.body.includes('Docs staleness check')
Tff7b72);
Tff7b72if (existing) {
Tff7b72await github.rest.issues.updateComment({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72comment_id: existing.id,
Tff7b72body: '## βœ… Docs staleness check passed\n\nThis PR includes updates to `docs/en/` alongside the source changes. Thank you!',
Tff7b72});
Tff7b72}

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffAdvisoryTa5d6ff Ta5d6ffstatus
Tff7b72ifTb4b4b4: Ta5d6ffsteps.changed.outputs.staleTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'true'
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72echo "::warning::UI source files changed without corresponding docs/en/ updates."
Tff7b72echo "Add the 'skip-docs-check' label if this PR does not require a doc update."
Tff7b72echo "NOTE: This check is advisory while docs coverage matures across platforms."
Tff7b72echo "To upgrade to blocking, change this step to 'exit 1'."

T8b949e# ── Job 2: Quality gates β€” link validation, coverage, registry, freshness ───
Tff7b72validateTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffDocsTa5d6ff Ta5d6ffqualityTa5d6ff Ta5d6ffgates
Tff7b72runs-onTb4b4b4: Ta5d6ffubuntu-24.04-arm

Tff7b72stepsTb4b4b4:
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCheckout
Tff7b72usesTb4b4b4: Ta5d6ffactions/checkout@v6
Tff7b72withTb4b4b4:
Tff7b72refTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.event.pull_request.head.shaTa5d6ff Ta5d6ff||Ta5d6ff Ta5d6ffgithub.shaTa5d6ff Ta5d6ff}}
Tff7b72fetch-depthTb4b4b4: Ta5d6ff1

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffSetupTa5d6ff Ta5d6ffNode.js
Tff7b72usesTb4b4b4: Ta5d6ffactions/setup-node@v6
Tff7b72withTb4b4b4:
Tff7b72node-versionTb4b4b4: Ta5d6ff"Ta5d6ff24Ta5d6ff"

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffValidateTa5d6ff Ta5d6ffinternalTa5d6ff Ta5d6fflinks
Tff7b72runTb4b4b4: Ta5d6ffnodeTa5d6ff Ta5d6ffscripts/validate-doc-links.jsTa5d6ff Ta5d6ffdocs/en

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCheckTa5d6ff Ta5d6ffdocTa5d6ff Ta5d6ffcoverage
Tff7b72runTb4b4b4: Ta5d6ffnodeTa5d6ff Ta5d6ffscripts/check-doc-coverage.jsTa5d6ff Ta5d6ff.

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffValidateTa5d6ff Ta5d6ffDocBundleLoaderTa5d6ff Ta5d6ffregistry
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72loader="feature/docs/src/commonMain/kotlin/org/meshtastic/feature/docs/data/DocBundleLoader.kt"
Tff7b72missing=0
Tff7b72for f in docs/en/user/*.md docs/en/developer/*.md; do
Tff7b72slug=$(basename "$f" .md)
Tff7b72if ! grep -q "\"$slug\"" "$loader"; then
Tff7b72echo "ERROR: $slug not registered in DocBundleLoader.kt"
Tff7b72missing=$((missing + 1))
Tff7b72fi
Tff7b72done
Tff7b72if [ "$missing" -gt 0 ]; then
Tff7b72echo ""
Tff7b72echo "FAILED: $missing page(s) missing from DocBundleLoader.kt in-app index."
Tff7b72exit 1
Tff7b72fi
Tff7b72echo "All doc pages registered in DocBundleLoader."

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCheckTa5d6ff Ta5d6ffdocTa5d6ff Ta5d6fffreshness
T8b949e# Advisory β€” warns on stale pages but does not block PRs
Tff7b72continue-on-errorTb4b4b4: Ta5d6fftrue
Tff7b72runTb4b4b4: Ta5d6ffnodeTa5d6ff Ta5d6ffscripts/check-doc-freshness.jsTa5d6ff Ta5d6ffdocsTa5d6ff Ta5d6ff--max-age-days=180

T8b949e# ── Job 3: Preview staleness β€” flag UI changes without preview updates ──────
Tff7b72preview-stalenessTb4b4b4:
Tff7b72nameTb4b4b4: Ta5d6ffPreviewTa5d6ff Ta5d6ffstalenessTa5d6ff Ta5d6ffcheck
Tff7b72runs-onTb4b4b4: Ta5d6ffubuntu-24.04-arm
Tff7b72ifTb4b4b4: Tb4b4b4>Tb4b4b4-
Tff7b72github.event.pull_request != null
Tff7b72&& !contains(github.event.pull_request.labels.*.name, 'skip-preview-check')

Tff7b72stepsTb4b4b4:
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCheckout
Tff7b72usesTb4b4b4: Ta5d6ffactions/checkout@v6
Tff7b72withTb4b4b4:
Tff7b72refTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.event.pull_request.head.shaTa5d6ff Ta5d6ff}}
Tff7b72fetch-depthTb4b4b4: Ta5d6ff0

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDetectTa5d6ff Ta5d6ffchangedTa5d6ff Ta5d6fffiles
Tff7b72idTb4b4b4: Ta5d6ffchanged
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72BASE="${{ github.event.pull_request.base.sha }}"
Tff7b72HEAD="${{ github.event.pull_request.head.sha }}"

Tff7b72changed=$(git diff --name-only "$BASE" "$HEAD")

Tff7b72# UI composables changed (screens, components β€” excluding tests and previews)
Tff7b72ui_changed=$(echo "$changed" | grep -E \
Tff7b72'^(feature|core/ui)/.*/src/commonMain/.*/.*\.(kt)$' \
Tff7b72| grep -E '/(ui|component|screen)/' \
Tff7b72| grep -v 'Test\|Preview\|__Snapshots__' || true)

Tff7b72# Preview files changed
Tff7b72preview_changed=$(echo "$changed" | grep -E 'Preview.*\.kt$' || true)

Tff7b72# Screenshot test files changed
Tff7b72screenshot_tests_changed=$(echo "$changed" | grep -E '^screenshot-tests/src/screenshotTest/.*\.kt$' || true)

Tff7b72# Reference images changed
Tff7b72refs_changed=$(echo "$changed" | grep -E '^screenshot-tests/src/screenshotTestDebug/reference/.*\.png$' || true)

Tff7b72echo "ui_changed<<EOF" >> "$GITHUB_OUTPUT"
Tff7b72echo "$ui_changed" >> "$GITHUB_OUTPUT"
Tff7b72echo "EOF" >> "$GITHUB_OUTPUT"

Tff7b72echo "preview_changed<<EOF" >> "$GITHUB_OUTPUT"
Tff7b72echo "$preview_changed" >> "$GITHUB_OUTPUT"
Tff7b72echo "EOF" >> "$GITHUB_OUTPUT"

Tff7b72echo "screenshot_tests_changed<<EOF" >> "$GITHUB_OUTPUT"
Tff7b72echo "$screenshot_tests_changed" >> "$GITHUB_OUTPUT"
Tff7b72echo "EOF" >> "$GITHUB_OUTPUT"

Tff7b72echo "refs_changed<<EOF" >> "$GITHUB_OUTPUT"
Tff7b72echo "$refs_changed" >> "$GITHUB_OUTPUT"
Tff7b72echo "EOF" >> "$GITHUB_OUTPUT"

Tff7b72# Preview staleness: UI changed but no preview updates
Tff7b72if [[ -n "$ui_changed" && -z "$preview_changed" ]]; then
Tff7b72echo "preview_stale=true" >> "$GITHUB_OUTPUT"
Tff7b72else
Tff7b72echo "preview_stale=false" >> "$GITHUB_OUTPUT"
Tff7b72fi

Tff7b72# Screenshot staleness: previews changed but no reference image updates
Tff7b72if [[ -n "$preview_changed" && -z "$refs_changed" ]]; then
Tff7b72echo "screenshot_stale=true" >> "$GITHUB_OUTPUT"
Tff7b72else
Tff7b72echo "screenshot_stale=false" >> "$GITHUB_OUTPUT"
Tff7b72fi

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffPostTa5d6ff Ta5d6ffpreviewTa5d6ff Ta5d6ffadvisory
Tff7b72ifTb4b4b4: Ta5d6ffsteps.changed.outputs.preview_staleTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'true'
Tff7b72usesTb4b4b4: Ta5d6ffactions/github-script@v9
Tff7b72withTb4b4b4:
Tff7b72scriptTb4b4b4: Tb4b4b4|
Tff7b72const uiChanged = `${{ steps.changed.outputs.ui_changed }}`.trim();
Tff7b72const body = [
Tff7b72'## πŸ–ΌοΈ Preview staleness check β€” advisory',
Tff7b72'',
Tff7b72'This PR modifies UI composables but does not update any `*Previews.kt` files.',
Tff7b72'',
Tff7b72'> Previews power screenshot tests and in-app docs screenshots. Keeping them current ensures visual regression coverage stays accurate.',
Tff7b72'',
Tff7b72'**Changed UI files:**',
Tff7b72'```',
Tff7b72uiChanged,
Tff7b72'```',
Tff7b72'',
Tff7b72'**What to check:**',
Tff7b72'| Pattern | Preview file convention |',
Tff7b72'|---|---|',
Tff7b72'| `feature/{name}/…/ui/` or `component/` | `feature/{name}/…/*Previews.kt` |',
Tff7b72'| `core/ui/…/` | `core/ui/…/` (previews colocated) |',
Tff7b72'',
Tff7b72'**Adding previews checklist:**',
Tff7b72'1. Create or update a `*Previews.kt` file in the same module with `@PreviewLightDark`',
Tff7b72'2. Add `@Suppress("PreviewPublic")` if the preview is consumed by screenshot-tests',
Tff7b72'3. Add corresponding `@PreviewTest` function in `screenshot-tests/src/screenshotTest/`',
Tff7b72'4. Run `./gradlew :screenshot-tests:updateDebugScreenshotTest` to generate reference images',
Tff7b72'',
Tff7b72'If this PR does **not** require preview updates (e.g., logic-only change, non-visual refactor), add the **`skip-preview-check`** label to dismiss.',
Tff7b72].join('\n');

Tff7b72const { data: comments } = await github.rest.issues.listComments({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72issue_number: context.issue.number,
Tff7b72});
Tff7b72const existing = comments.find(c =>
Tff7b72c.user.login === 'github-actions[bot]' &&
Tff7b72c.body.includes('Preview staleness check')
Tff7b72);
Tff7b72if (existing) {
Tff7b72await github.rest.issues.updateComment({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72comment_id: existing.id,
Tff7b72body,
Tff7b72});
Tff7b72} else {
Tff7b72await github.rest.issues.createComment({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72issue_number: context.issue.number,
Tff7b72body,
Tff7b72});
Tff7b72}

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffPostTa5d6ff Ta5d6ffscreenshotTa5d6ff Ta5d6ffadvisory
Tff7b72ifTb4b4b4: Ta5d6ffsteps.changed.outputs.screenshot_staleTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'true'
Tff7b72usesTb4b4b4: Ta5d6ffactions/github-script@v9
Tff7b72withTb4b4b4:
Tff7b72scriptTb4b4b4: Tb4b4b4|
Tff7b72const previewChanged = `${{ steps.changed.outputs.preview_changed }}`.trim();
Tff7b72const body = [
Tff7b72'## πŸ“Έ Screenshot reference staleness β€” advisory',
Tff7b72'',
Tff7b72'This PR modifies preview composables but does not update screenshot reference images.',
Tff7b72'',
Tff7b72'> Reference images in `screenshot-tests/src/screenshotTestDebug/reference/` must be regenerated when previews change, or `validateDebugScreenshotTest` will fail.',
Tff7b72'',
Tff7b72'**Changed preview files:**',
Tff7b72'```',
Tff7b72previewChanged,
Tff7b72'```',
Tff7b72'',
Tff7b72'**How to update:**',
Tff7b72'```bash',
Tff7b72'./gradlew :screenshot-tests:updateDebugScreenshotTest',
Tff7b72'```',
Tff7b72'Then commit the updated reference PNGs.',
Tff7b72'',
Tff7b72'If this change is intentionally preview-only (e.g., adding a preview that doesn\'t need a test yet), add the **`skip-preview-check`** label.',
Tff7b72].join('\n');

Tff7b72const { data: comments } = await github.rest.issues.listComments({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72issue_number: context.issue.number,
Tff7b72});
Tff7b72const existing = comments.find(c =>
Tff7b72c.user.login === 'github-actions[bot]' &&
Tff7b72c.body.includes('Screenshot reference staleness')
Tff7b72);
Tff7b72if (existing) {
Tff7b72await github.rest.issues.updateComment({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72comment_id: existing.id,
Tff7b72body,
Tff7b72});
Tff7b72} else {
Tff7b72await github.rest.issues.createComment({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72issue_number: context.issue.number,
Tff7b72body,
Tff7b72});
Tff7b72}

Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDismissTa5d6ff Ta5d6ffcommentsTa5d6ff Ta5d6ffwhenTa5d6ff Ta5d6ffresolved
Tff7b72ifTb4b4b4: Tb4b4b4>Tb4b4b4-
Tff7b72steps.changed.outputs.preview_stale == 'false'
Tff7b72&& steps.changed.outputs.screenshot_stale == 'false'
Tff7b72usesTb4b4b4: Ta5d6ffactions/github-script@v9
Tff7b72withTb4b4b4:
Tff7b72scriptTb4b4b4: Tb4b4b4|
Tff7b72const { data: comments } = await github.rest.issues.listComments({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72issue_number: context.issue.number,
Tff7b72});
Tff7b72for (const marker of ['Preview staleness check', 'Screenshot reference staleness']) {
Tff7b72const existing = comments.find(c =>
Tff7b72c.user.login === 'github-actions[bot]' &&
Tff7b72c.body.includes(marker)
Tff7b72);
Tff7b72if (existing) {
Tff7b72await github.rest.issues.updateComment({
Tff7b72owner: context.repo.owner,
Tff7b72repo: context.repo.repo,
Tff7b72comment_id: existing.id,
Tff7b72body: `## βœ… ${marker} passed\n\nPreview and screenshot references are up to date.`,
Tff7b72});
Tff7b72}
Tff7b72}

Served by rngit 1.5.2 - Generated in 0.1s